home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / MegaTron / MegaTronV142.AMOS / MegaTronV142.amosSourceCode < prev    next >
Encoding:
AMOS Source Code  |  1996-03-30  |  48.9 KB  |  1,862 lines

  1. ' *************************************
  2. ' *                                   *
  3. ' *          Mega Tron V1.5           *  
  4. ' *      Written by Chris Hodges      *
  5. ' *                                   *
  6. ' *************************************
  7. '
  8. Set Buffer 20
  9. If Extension_8_09B4 
  10.   C$=Upper$(Command Line$)
  11. Else 
  12.   C$=Upper$( Extension_8_09D6( Extension_8_09C2 ))
  13. End If 
  14. 'C$='MUSIC="ST-00:Modules/mod.zif" LOAD' 
  15. Global MXPL,MXEX,MXRO,CH,SO,FC,MUON,SOON,NTS,LOWLEVEL,PLAY4DIS
  16. OLDSYS=Peek(Leek(4)+530)
  17. MXPL=10 : MXEX=10 : MXRO=10
  18. MUON=1 : SOON=1 : TITLE=1 : LOAOPTS=0 : WB=1
  19. LOWDIS=0 : PLAY4DIS=0
  20. M$="MegaTron.mus"
  21. Gosub PARSECOMMANDLINE
  22. NTS=-Ntsc*14
  23. Dim CONF(8),KEYS(6,6),DEV$(8),CO$(12),WEAP$(12),WP(12),EXTKEYS$(37),PRE$(7)
  24. Dim PL(MXPL-1,15),EX(MXEX-1,3),RO(MXRO-1,8)
  25. Global CONF(),DEV$(),CO$(),WEAP$(),WP(),PL(),EX(),RO()
  26. Hide On 
  27. Gosub LEADATA
  28. Gosub INFOSCREEN
  29. If TITLE
  30.   TITLE
  31. Else 
  32.   If MUON
  33.      Extension_8_10F2 125 : Extension_8_108E 3
  34.   End If 
  35. End If 
  36. INIT
  37. Do 
  38.   MENU
  39.   Exit If Param=0
  40.   SO=CONF(1)
  41.   RAWRESET
  42.   GAMEON
  43. Loop 
  44. If CONF(0) and MUON Then Extension_8_10A8 
  45. If OLDSYS=50 Then Extension_8_037A Else Extension_8_036C 
  46. End 
  47. PARSECOMMANDLINE:
  48.   If Instr(C$,"CLOSEWORKBENCH") Then Close Workbench : Extension_8_05D6 : WB=0
  49.   If Instr(C$,"60HZ") Then Extension_8_036C 
  50.   If Instr(C$,"50HZ") Then Extension_8_037A 
  51.   If Instr(C$,"NOMUSIC") Then MUON=0
  52.   If Instr(C$,"NOSOUND") Then SOON=0
  53.   If Instr(C$,"SKIPTITLE") Then TITLE=0
  54.   If Instr(C$,"LOAD") Then LOAOPTS=1
  55.   If Instr(C$,"DISABLELOWLEVEL") Then LOWDIS=1
  56.   If Instr(C$,"DISABLE4PLAYER") Then PLAY4DIS=1
  57.   P=Instr(C$,"PLAYERS=")
  58.   If P Then MXPL=Max(Min(Val(Mid$(C$,P+8)),10),2)
  59.   P=Instr(C$,"EXPLOSIONS=")
  60.   If P Then MXEX=Max(Min(Val(Mid$(C$,P+11)),30),2)
  61.   P=Instr(C$,"ROCKETS=")
  62.   If P Then MXRO=Max(Min(Val(Mid$(C$,P+8)),30),2)
  63.   P=Instr(C$,"MUSIC=")
  64.   If P
  65.     M$="" : Add P,6 : BR=0
  66.     Do 
  67.       Exit If P>Len(C$)
  68.       A$=Mid$(C$,P,1)
  69.       If A$='"' : BR=1-BR : A$="" : End If 
  70.       Exit If(A$<=" ") and BR=0
  71.       M$=M$+A$
  72.       Inc P
  73.     Loop 
  74.   End If 
  75. Return 
  76. LEADATA:
  77.   SO=SOON : MU=MUON
  78.   Trap Extension_8_0956 
  79.   If Errtrap
  80.     ER$="Audio channels already reserved!"
  81.     ERS$=ER$
  82.     MUON=0 : SOON=0 : Erase 3
  83.     Return 
  84.   End If 
  85.   If MUON
  86.     Trap Extension_8_0456 M$,-3
  87.     If Errtrap
  88.       MUON=0
  89.       ER$= Extension_8_0522( Extension_8_0532 )
  90.     Else 
  91.       If Peek$(Start(3)+1080,4)<>"M.K."
  92.         MUON=0 : Erase 3
  93.         ER$="Not a trackermusic!"
  94.       Else 
  95.         ER$='Loaded "'+ Extension_8_02F0(M$)+'" length:'+Str$(Length(3))
  96.       End If 
  97.     End If 
  98.   Else 
  99.     ER$="Music disabled"
  100.   End If 
  101.   If SOON
  102.     Trap Load "MegaTron.sam",5
  103.     If Errtrap
  104.       ERS$= Extension_8_0522( Extension_8_0532 )
  105.       SOON=0
  106.     Else 
  107.        Extension_8_142A 5
  108.       ERS$="Loaded"
  109.        Extension_8_008A 5
  110.     End If 
  111.   Else 
  112.     ERS$="Sound disabled"
  113.   End If 
  114. Return 
  115. INFOSCREEN:
  116.   Screen Open 0,640,200,2,$8000
  117.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  118.   Palette 0,0
  119.   Centre "Welcome to Megatron" : Print : Print : Print 
  120.   Print "Megatron Version: V1.5 30-Mar-96"
  121.   Print "Free chip memory:";Chip Free/1024;" KB"
  122.   Print "Free fast memory:";Fast Free/1024;" KB"
  123.   Print "Processor       :"; Extension_8_060E 
  124.   Print "Coprocessor     :";
  125.   If Extension_8_0618 =0
  126.     Print " none mounted"
  127.   Else 
  128.     Print Str$( Extension_8_0618 )
  129.   End If 
  130.   Print "Display system  : ";
  131.   If Ntsc
  132.     Print "NTSC"
  133.   Else 
  134.     Print "PAL"
  135.   End If 
  136.   Print "Lowlevel library: ";
  137.   If LOWDIS=0
  138.     If Exist("LIBS:lowlevel.library")
  139.       Print "found -> joypad support enabled"
  140.       LOWLEVEL=1
  141.     Else 
  142.       Print "not found! :-("
  143.       LOWLEVEL=0
  144.     End If 
  145.   Else 
  146.     Print "disabled"
  147.     LOWLEVEL=0
  148.   End If 
  149.   Print "4 player adapter: ";
  150.   If PLAY4DIS
  151.     Print "disabled"
  152.   Else 
  153.     Print "enabled"
  154.   End If 
  155.   Print "Programm called : ";
  156.   If Extension_8_09B4 
  157.     Print "from CLI ["+Mid$(Str$( Extension_8_09B4 ),2)+"]"
  158.   Else 
  159.     Print "from Workbench"
  160.   End If 
  161.   Print "Workbench       : ";
  162.   If WB Then Print "Open" Else Print "Probably closed"
  163.   Print "Music           : ";ER$
  164.   Print "Sound           : ";ERS$
  165.   Print "Title           : ";
  166.   If TITLE Then Print "Coming soon" Else Print "Skipped"
  167.   Print "Load settings   : ";
  168.   If LOAOPTS Then Print "Yes" Else Print "No"
  169.   Print "Maximum Players :";Str$(MXPL)
  170.   Print "Maximum Explos. :";Str$(MXEX)
  171.   Print "Maximum Rockets :";Str$(MXRO)
  172.   Print 
  173.   Print "Enjoy the game!"
  174.   Fade 1,0,$FFF
  175.   For A=0 To 124
  176.     Multi Wait 
  177.     Exit If Fire(1) or Mouse Key or(Inkey$<>"")
  178.   Next 
  179.   Fade 1 : Wait 16
  180.   Screen Close 0
  181. Return 
  182. Procedure TITLE
  183.   MXDR=49
  184.   Dim DR(MXDR,1),ST$(5,5)
  185.   Unpack 8 To 0 : Screen Hide 
  186.   Colour 13,$B00 : Colour 14,$900 : Colour 15,$800
  187.   Colour 13+16,$B00 : Colour 14+16,$900 : Colour 15+16,$800
  188.   Unpack 10 To 3 : Screen Hide 
  189.   Get Palette 0 : For A=0 To 15 : Colour A+16,$FFF : Next 
  190.   Screen 0
  191.   For A=0 To 15 : Colour A+16,Colour(A) : Next 
  192.   Screen Open 2,320,32,2,0 : Screen Hide 
  193.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  194.   LG=Logbase(0)
  195.   Screen Open 1,320,256,32,0 : Screen Hide 
  196.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  197.   Screen Display 1,128,40-NTS,320,256+Ntsc*32
  198.   Screen Offset 1,0,-32*Ntsc
  199.   For A=0 To 31 : Colour A,0 : Next 
  200.   Screen Copy 0 To 1
  201.   Screen 0 : Paste Bob 0,48,1 : Screen 1
  202.   Gosub DROPINIT
  203.   Double Buffer 
  204.   Autoback 0
  205.   If MUON
  206.      Extension_8_10F2 125 : Extension_8_108E 3
  207.   End If 
  208.   Screen Show 
  209.   Fade 2 To 0
  210.   Screen 2
  211.   Repeat 
  212.     Screen Swap 1 : Wait Vbl 
  213.     C=0
  214.     For A=0 To MXDR
  215.       If DR(A,1)<40
  216.         Inc C
  217.         Paste Bob DR(A,0)-7,DR(A,1)-16,2
  218.         Add DR(A,1), Extension_8_11B8(1)+1
  219.       End If 
  220.     Next 
  221.      Extension_8_0882 0,16,48,304,80 To 1,16,48,LG-48*40
  222.   Until C=0
  223.   Screen 2 : Cls 
  224.   Restore TEX
  225.   For PG=0 To 5
  226.     For LI=0 To 5
  227.       Read A$
  228.       ST$(PG,LI)=A$
  229.       Exit If A$=""
  230.     Next 
  231.   Next 
  232.   Screen 1
  233.   PG=0
  234.   Do 
  235.     Screen Copy 0 To Logic(1)
  236.     Fill Logbase(4) To Logbase(4)+40*256,0
  237.     Gosub PASTMASK
  238.     Screen Swap 
  239.     Gosub WHITIN
  240.     Screen Copy Physic(1) To Logic(1)
  241.     Gosub PASTTEXT
  242.     Screen Swap 
  243.     Gosub FADIN
  244.     For A=0 To 99
  245.       Multi Wait 
  246.       Exit If Fire(1) or Mouse Key or(Inkey$<>""),2
  247.     Next 
  248.     Gosub WHITIN
  249.     Screen Swap 
  250.     Gosub FADIN
  251.     Add PG,1,0 To 5
  252.   Loop 
  253.   Gosub WHITIN
  254.   Screen Swap 
  255.   Gosub FADIN
  256.   Screen 3 : For A=0 To 15 : Colour A,$FFF : Next 
  257.   Screen 1
  258.   Fade 1 To 3 : Wait 16
  259.   Fade 1 : Wait 16
  260.   For A=0 To 3 : Screen Close A : Next 
  261. Pop Proc
  262. PASTMASK:
  263.   Y=104
  264.   For LI=0 To 5
  265.     Exit If ST$(PG,LI)=""
  266.     X=160-Len(ST$(PG,LI))*8
  267.     For A=1 To Len(ST$(PG,LI))
  268.       C=Asc(Mid$(ST$(PG,LI),A,1))-32
  269.       Screen Copy 3,(C mod 20)*16,(C/20)*16,(C mod 20)*16+16,(C/20)*16+16 To Logic(1),X,Y,%1100000
  270.       Add X,16
  271.     Next 
  272.     Add Y,24
  273.   Next 
  274. Return 
  275. WHITIN:
  276.   Fade 2 To 3
  277.   Wait 32
  278. Return 
  279. PASTTEXT:
  280.   Y=104
  281.   For LI=0 To 5
  282.     Exit If ST$(PG,LI)=""
  283.     X=160-Len(ST$(PG,LI))*8
  284.     For A=1 To Len(ST$(PG,LI))
  285.       C=Asc(Mid$(ST$(PG,LI),A,1))-29
  286.       Paste Bob X,Y,C
  287.       Add X,16
  288.     Next 
  289.     Add Y,24
  290.   Next 
  291. Return 
  292. FADIN:
  293.   Fade 1 To 0
  294.   Wait 16
  295. Return 
  296. DROPINIT:
  297.   Do 
  298.     X=16
  299.     For A=0 To MXDR
  300.       DR(A,0)=X : DR(A,1)=0
  301.       Add X, Extension_8_11B8(4)+5
  302.       Exit If X>=312,2
  303.     Next 
  304.   Loop 
  305.   For A=A To MXDR
  306.     DR(A,1)=100
  307.   Next 
  308. Return 
  309. TEX:
  310.   Data " ","WELCOME TO MEGATRON"," ","WRITTEN BY","CHRIS HODGES",""
  311.   Data " ","THIS IS SHAREWARE","ENJOY IT...","AND IF YOU LIKE IT","PLEASE SEND ME","SOME MONEY"
  312.   Data "WRITE TO"," ","CHRIS HODGES","KENNEDYSTR. 8","D-82178 PUCHHEIM","WEST GERMANY"
  313.   Data " "," ","& THANKS &",""
  314.   Data "GREETINGS"," ","MAGIC, VIP, MERLIN,","AMIGAMAN, MARC,","PAUL, ANDY, GREG,","MARTIJN, MARCO,"
  315.   Data "GREETINGS"," ","HANS PETER, TOBIAS","RALF, XAVER, TOBI","HENNING, MICHAEL,","MICHI AND MARKUS"
  316. End Proc
  317. Procedure INIT
  318.   Shared EXTKEYS$(),KEYS(),PRE$(),PRE,HUM,COM
  319.   Restore DEVS
  320.   For A=0 To 8
  321.     Read DEV$(A)
  322.   Next 
  323.   Restore WEAPONS
  324.   For A=0 To 12
  325.     Read WEAP$(A)
  326.   Next 
  327.   Restore PRICE
  328.   For A=0 To 12
  329.     Read WP(A)
  330.   Next 
  331.   Restore FARBEN
  332.   For A=1 To 11
  333.     Read CO$(A)
  334.   Next 
  335.   Restore KEYS
  336.   For A=0 To 6
  337.     For K=0 To 6
  338.       Read KEYS(A,K)
  339.     Next 
  340.   Next 
  341.   Restore EXTKEYS
  342.   For A=0 To 37
  343.     Read EXTKEYS$(A)
  344.   Next 
  345.   Restore PRESETS
  346.   For A=0 To 7
  347.     Read PRE$(A)
  348.   Next 
  349.   For A=0 To MXPL-1
  350.     For AA=0 To 13 : PL(A,AA)=0 : Next 
  351.     PL(A,6)=8
  352.     PL(A,4)=A+2 : PL(A,10)= Extension_8_11B8(9) : PL(A,11)= Extension_8_11B8(9) : PL(A,12)= Extension_8_11B8(9)
  353.   Next 
  354.   PL(0,6)=1
  355.   CONF(0)=MUON : CONF(1)=SOON : CONF(2)=0 : CONF(3)=2
  356.   CONF(4)=10 : CONF(5)=10 : CONF(6)=10 : CONF(7)=1 : CONF(8)=1
  357.   FC=CONF(0)*3 : CH=FC
  358.   HUM=1 : COM=9 : PRE=0
  359. Pop Proc
  360. PRESETS:
  361.   Data "randomize","normal battle","rocket attack","superior coms","monochrom"
  362.   Data "total defense","total attack","no weapons"
  363. DEVS:
  364.   Data "disabl","joy  1","joy  2","joy *3","joy *4","keys 1","keys 2","keys 3","compu."
  365. WEAPONS:
  366.   Data "none","jumpspeed","imploder","tunnel","autopilot","boxes","circle","rockets"
  367.   Data "shield","teleport","speed up","eater","freeze"
  368. PRICE:
  369.   Data 0,2,250,500,300,600,750,500,1000,250,2,500,250
  370. FARBEN:
  371.   Data "white","red","green","blue","magenta","cyan","amber","yellow","grey","l-green","pink"
  372. EXTKEYS:
  373.   Data "joy 1 left","joy 1 right","joy 1 up","joy 1 down","joy 1 fire","pad 1 blue","pad 1 yellow","pad 1 green"
  374.   Data "joy 2 left","joy 2 right","joy 2 up","joy 2 down","joy 2 fire","pad 2 blue","pad 2 yellow","pad 2 green"
  375.   Data "joy 3 left","joy 3 right","joy 3 up","joy 3 down","joy 3 fire","","",""
  376.   Data "joy 4 left","joy 4 right","joy 4 up","joy 4 down","joy 4 fire","","",""
  377.   Data "pad 1 forward","pad 1 backward","pad 1 play","pad 2 forward","pad 2 backward","pad 2 play"
  378. KEYS:
  379.   Data $80,$81,$82,$83,$84,$64,$66
  380.   Data $88,$89,$8A,$8B,$8C,$65,$67
  381.   Data $90,$91,$92,$93,$94,$63,$42
  382.   Data $98,$99,$9A,$9B,$9C,$5D,$4A
  383.   Data $4F,$4E,$4C,$4D,$46,$5F,$41
  384.   Data $2D,$2F,$3E,$1E,$2E,$43,$F
  385.   Data $31,$32,$10,$20,$40,$42,$63
  386. End Proc
  387. Procedure RAWRESET
  388.   For A=0 To MXPL-1
  389.     PL(A,8)=0 : PL(A,7)=0 : PL(A,13)=0 : PL(A,9)=0 : PL(A,14)=0 : PL(A,15)=0
  390.   Next 
  391. End Proc
  392. Procedure PLAZERRESET
  393.   For A=0 To MXEX-1
  394.     EX(A,2)=0
  395.   Next 
  396.   For A=0 To MXRO-1
  397.     RO(A,4)=0
  398.   Next 
  399.   CO=0
  400.   For A=0 To MXPL-1
  401.     If PL(A,6)>0 Then Inc CO
  402.   Next 
  403.   P=0
  404.   For A=0 To MXPL-1
  405.     If PL(A,6)>0
  406.       PL(A,0)=160+ Extension_8_1114((P*1024)/CO,80)
  407.       PL(A,1)=112+ Extension_8_1106((P*1024)/CO,80)
  408.       If Abs(PL(A,0)-160)>Abs(PL(A,1)-112)
  409.         PL(A,2)=Sgn(160-PL(A,0)) : PL(A,3)=0
  410.       Else 
  411.         PL(A,3)=Sgn(112-PL(A,1)) : PL(A,2)=0
  412.       End If 
  413.       PL(A,5)=1
  414.       Inc P
  415.     Else 
  416.       PL(A,5)=0
  417.     End If 
  418.     PL(A,9)=0 : PL(A,13)=0 : PL(A,15)=0
  419.   Next 
  420. End Proc[CO]
  421. Procedure MENU
  422.   Shared EXTKEYS$(),KEYS(),PRE$(),PRE,HUM,COM,LOAOPTS
  423.   A$=""
  424.   If LOAOPTS Then Gosub OPTSLOAD : LOAOPTS=0
  425.   ACPL=0
  426.   Dim ST$(1,3)
  427.   ST$(0,0)="off" : ST$(0,1)="on"
  428.   ST$(1,0)="low" : ST$(1,1)="med" : ST$(1,2)="high" : ST$(1,3)="ultra"
  429.   Set Rainbow 0,0,182,"","",""
  430.   Screen Open 1,320,64+Ntsc*28,16,0 : Screen Hide 
  431.   Curs Off : Flash Off : Paper 0 : Pen 1
  432.   Screen Display 1,128,229-NTS+Ntsc*8,320,64+Ntsc*28
  433.   Ink 1,0 : Gr Writing 0
  434.   For A=0 To 15 : Colour A,0 : Next 
  435.   Gosub UPDATLASTSCORE
  436.   Wait Vbl 
  437.   Screen Show 
  438.   Fade 1,0,$FFF,$F00,$F0,$44F,$F0F,$FF,$F80,$FF0,$888,$8F8,$F8F
  439.   Wait 8
  440.   Screen Open 0,640,188,8,0 : Screen Hide 
  441.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  442.   Screen Display 0,128,40-NTS,320,188+Ntsc*8
  443.   Screen Offset 0,0,0
  444.   Ink 1,0 : Gr Writing 0
  445.   Palette 0,0,0,0,0,0,0,0
  446.   For A=0 To 199
  447.     C= Extension_8_11B8(2)
  448.     If C=0 Then C=7
  449.     X= Extension_8_11B8(319) : Y= Extension_8_11B8(179)
  450.      Extension_8_0388 X,Y,C
  451.   Next 
  452.   T1["Welcome to Megatron by Chris Hodges",0,1]
  453.   T1["Start game",24,3]
  454.   T1["Player options menu",40,5]
  455.   T1["Redefine keys",56,5]
  456.   T1["Game options menu",72,5]
  457.   T1["Disk menu",88,5]
  458.   T1["Credits",104,5]
  459.   T1["Quit game",120,3]
  460.   Wait Vbl 
  461.   Rainbow 0,0,40-NTS,182
  462.   Screen Show 
  463.   MXBS=6
  464.   Fade 2,0,$FFF,$444,$FF0,$440,$F0F,$404,$888
  465.   Gosub FADINRAIN
  466.   TM=15 : SM=20 : CH=FC
  467.   Do 
  468.     Gosub CHECKS
  469.     If MK=0 and RX=0 Then SM=0
  470.     If(TM=0) and MK
  471.       TM=10
  472.       If NCP=0 or NCP=6 : Exit : End If 
  473.       If NCP=1 : Gosub PLAZERMENU : End If 
  474.       If NCP=2 : Gosub REDEFINE : End If 
  475.       If NCP=3 : Gosub GAMEMENU : End If 
  476.       If NCP=4 : Gosub DISKMENU : End If 
  477.       If NCP=5 : Gosub CREDITS : End If 
  478.     End If 
  479.     If MK Then RX=1
  480.   Loop 
  481.   Fade 2 : Timer=0
  482.   Gosub FADOUTRAIN
  483.   While Timer<32 : Multi Wait : Wend 
  484.   Screen Close 0 : Rainbow Del : View 
  485.   Screen 1 : Fade 1 : Wait 16
  486.   Screen Close 1
  487. Pop Proc[NCP=0]
  488. UPDATLASTSCORE:
  489.   Cls 
  490.   If Ntsc=0
  491.     T["Last game's score table",-1,0,1]
  492.     Pen 1 : Locate 0,2 : Print "device score money  device score money"
  493.     Y=3 : X=0
  494.     For A=0 To MXPL-1
  495.       If PL(A,6)
  496.         Pen PL(A,4)
  497.         Locate X,Y
  498.         Print DEV$(PL(A,6));" "; Extension_8_0EB8(PL(A,7),5);" "; Extension_8_0EB8(PL(A,8),5);
  499.         Inc Y : If Y>7 : Y=3 : Add X,20 : End If 
  500.       End If 
  501.     Next 
  502.   Else 
  503.      Extension_8_1204 30
  504.     T["Last game's score table",-1,0,1]
  505.     Ink 1,0
  506.     Text 0,12+Text Base,"device score money  device score money  device score money  device score money"
  507.     Y=18 : X=0
  508.     For A=0 To MXPL-1
  509.       If PL(A,6)
  510.         Ink PL(A,4),0
  511.         Text X,Y+Text Base,DEV$(PL(A,6))+" "+ Extension_8_0EB8(PL(A,7),5)+" "+ Extension_8_0EB8(PL(A,8),5)
  512.         Add Y,6 : If Y>35 : Y=18 : Add X,80 : End If 
  513.       End If 
  514.     Next 
  515.      Extension_8_05B0 "topaz",8
  516.   End If 
  517. Return 
  518. CHECKS:
  519.   Gosub ACTUALCURS
  520.   Multi Wait : View : I$=Inkey$
  521.   SC=Scancode : KS=Key Shift
  522.   If KS
  523.     Trap SC= Extension_8_0506(KS)+$60
  524.   End If 
  525.   RX=(I$=Cleft$)-(I$=Cright$)+Jleft(1)-Jright(1)
  526.   RY=(I$=Cup$)-(I$=Cdown$)+Jup(1)-Jdown(1)
  527.   MK=(I$=Chr$(13))+(I$=" ")+Fire(1)
  528.   If RY=0 and RX=0 and MK=0 Then TM=0
  529.   If TM=0 and RY Then Add NCP,RY,0 To MXBS : TM=15
  530.   If(MK or RX) and CONF(1) and(SM=0)
  531.     SM=15 : Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
  532.   End If 
  533.   SM=Max(SM-1,0)
  534.   TM=Max(TM-1,0)
  535. Return 
  536. CHECK2:
  537.   Gosub ACTUALCURS
  538.   Multi Wait : View : I$=Inkey$
  539.   SC=Scancode : KS=Key Shift
  540.   If KS
  541.     Trap SC= Extension_8_0506(KS)+$60
  542.   End If 
  543.   If Extension_8_15BE(1,0) Then SC=$84
  544.   If Extension_8_15BE(1,1) Then SC=$85
  545.   If Extension_8_15BE(0,0) Then SC=$8C
  546.   If Extension_8_15BE(0,1) Then SC=$8D
  547.   If LOWLEVEL
  548.     If Extension_8_15BE(1,2) : SC=$86 : End If 
  549.     If Extension_8_15BE(1,3) : SC=$87 : End If 
  550.     If Extension_8_15BE(1,4) : SC=$A0 : End If 
  551.     If Extension_8_15BE(1,5) : SC=$A1 : End If 
  552.     If Extension_8_15BE(1,6) : SC=$A2 : End If 
  553.     If Extension_8_15BE(0,2) : SC=$8E : End If 
  554.     If Extension_8_15BE(0,3) : SC=$8F : End If 
  555.     If Extension_8_15BE(0,4) : SC=$A3 : End If 
  556.     If Extension_8_15BE(0,5) : SC=$A4 : End If 
  557.     If Extension_8_15BE(0,6) : SC=$A5 : End If 
  558.   End If 
  559.   If PLAY4DIS Then Return 
  560.   If Extension_8_0922(0) Then SC=$94
  561.   If Extension_8_0922(1) Then SC=$9C
  562. Return 
  563. FADINRAIN:
  564.   If CONF(1) : Extension_8_1450 Extension_8_04F8(CH),9 : Add CH,1,FC To 3 : End If 
  565.   OCP=1 : FL=0 : NCP=0
  566.   For A=7 To 0 Step -1
  567.     For B=0 To MXBS
  568.       For AA=0 To 7
  569.         Rain(0,B*16+AA+20)=Max(AA-A,0)
  570.         Rain(0,B*16+34-AA)=Max(AA-A,0)
  571.       Next 
  572.     Next 
  573.     Multi Wait : View 
  574.   Next 
  575. Return 
  576. FADOUTRAIN:
  577.   For A=0 To 7
  578.     Rain(0,OCP*16+A+20)=A
  579.     Rain(0,OCP*16+34-A)=A
  580.   Next 
  581.   If CONF(1) : Extension_8_1450 Extension_8_04F8(CH),9 : Add CH,1,FC To 3 : End If 
  582.   For A=0 To 7
  583.     For B=0 To 181
  584.       Rain(0,B)=Max(Rain(0,B)-1,0)
  585.     Next 
  586.     Multi Wait : View 
  587.   Next 
  588. Return 
  589. CREDITS:
  590.   Screen 1 : Fade 2 : Screen 0
  591.   MNCP=NCP : Gosub FADOUTRAIN
  592.   Ink 0 : Bar 320,0 To 639,187
  593.   For A=0 To 320 Step 8
  594.     Screen Offset 0,A,0
  595.     Wait Vbl 
  596.   Next 
  597.   A=Free
  598.   A$="; B: L R0=RA*16; L R1=480; L R2=RB; L R3=Z(15); "
  599.   A$=A$+"A: P; L X=R0/16; L Y=R1/16; L R0=R0+R2; L R1=R1+R3; L R3=R3+1; "
  600.   A$=A$+"I R1>3584 J C; J A; C: I R1>3658 J B; I R3<20 J A; L R3=0-R3/2-RD; "
  601.   A$=A$+"L R1=3584; L R2=RB; L RC=1; J A; "
  602.   For A=0 To 7
  603.     X=Free
  604.     Sprite A,0,0,65
  605.     Channel A To Sprite A
  606.     Amal A,String$("P",(A+1)*16)+A$
  607.   Next 
  608.   Palette 0,0,0,0,0,0,0,0
  609.   Wait Vbl 
  610.   Screen Display 0,128,40-NTS,320,188
  611.   Paste Bob 320,0,1
  612.   T3["V1.5",40]
  613.   T3["BY CHRIS HODGES",64]
  614.   T3["ANY GIFTS TO",96]
  615.   T3["CHRIS HODGES",120]
  616.   T3["KENNEDYSTR. 8",136]
  617.   T3["82178 PUCHHEIM",152]
  618.   T3["WEST GERMANY",168]
  619.   Fade 1,0,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  620.   Wait 16
  621.   Fade 1,0,$300,$600,$C00,$D30,$D70,$EB0,$FF0,,,,,,,,,,$FF0,$990,$550,,$FF,$99,$55,,$F0F,$909,$505,,$F0,$90,$50
  622.   Amal On 
  623.   Repeat 
  624.     Multi Wait 
  625.     Amreg(0)=128+ Extension_8_11B8(320) : Amreg(1)= Extension_8_11B8(30)-15 : Amreg(3)= Extension_8_11B8(5)
  626.     If Amreg(2) Then Amreg(2)=0 : If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),4 : Add CH,1,FC To 3
  627.   Until Mouse Key or Fire(1) or(Inkey$<>"")
  628.   Amreg(0)=0
  629.   Fade 1,0,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  630.   Wait 16
  631.   Fade 1
  632.   Wait 16 : Amal Off : Sprite Off 
  633.   Screen Display 0,128,40-NTS,320,188+Ntsc*8
  634.   Screen 1 : Fade 2,0,$FFF,$F00,$F0,$44F,$F0F,$FF,$F80,$FF0,$888,$8F8,$F8F
  635.   Screen 0
  636.   Ink 0 : Bar 320,0 To 639,187
  637.   Wait Vbl 
  638.   Palette 0,$FFF,$444,$FF0,$440,$F0F,$404,$888
  639.   For A=320 To 0 Step -8
  640.     Screen Offset 0,A,0
  641.     Wait Vbl 
  642.   Next 
  643.   Gosub FADINRAIN : NCP=MNCP
  644. Return 
  645. GAMEMENU:
  646.   MNCP=NCP : Gosub FADOUTRAIN
  647.   Ink 0 : Bar 320,0 To 639,187
  648.   For A=0 To 99
  649.     C= Extension_8_11B8(2)
  650.     If C=0 Then C=7
  651.     X= Extension_8_11B8(319) : Y= Extension_8_11B8(187)
  652.      Extension_8_0388 X+320,Y,C
  653.   Next 
  654.   T2["Game options menu",0,1]
  655.   T2["Return to main menu",24,5]
  656.   T2["Music: "+ST$(0,CONF(0)),40,1]
  657.   T2["Sound: "+ST$(0,CONF(1)),56,1]
  658.   T2["Computer intelligence: "+ST$(1,CONF(3)),72,1]
  659.   T2["Game speed:"+Str$(CONF(4)),88,1]
  660.   T2["Autoplot: "+ST$(0,CONF(2)),104,1]
  661.   T2["Rounds per game:"+Str$(CONF(5)),120,1]
  662.   T2["Explosion radius:"+Str$(CONF(6)),136,1]
  663.   T2["Boundary: "+ST$(0,CONF(7)),152,1]
  664.   T2["Events: "+ST$(0,CONF(8)),168,1]
  665.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  666.   For A=0 To 320 Step 8
  667.     Screen Offset 0,A,0
  668.     Wait Vbl 
  669.   Next 
  670.   MXBS=9
  671.   Gosub FADINRAIN
  672.   Do 
  673.     Gosub CHECKS
  674.     If MK
  675.       Exit If NCP=0
  676.     End If 
  677.     If TM=0 and RX
  678.       TM=10
  679.       If NCP=1 and MUON
  680.         CONF(0)=1-CONF(0)
  681.         If CONF(0)=0
  682.            Extension_8_10A8 
  683.           FC=0
  684.         Else 
  685.            Extension_8_108E 3
  686.           FC=3 : CH=3
  687.         End If 
  688.         T2["Music: "+ST$(0,CONF(0)),40,1]
  689.       End If 
  690.       If NCP=2 and SOON
  691.         CONF(1)=1-CONF(1)
  692.         T2["Sound: "+ST$(0,CONF(1)),56,1]
  693.       End If 
  694.       If NCP=3
  695.         Add CONF(3),RX,0 To 3
  696.         T2["Computer intelligence: "+ST$(1,CONF(3)),72,1]
  697.       End If 
  698.       If NCP=4
  699.         Add CONF(4),RX,1 To 20
  700.         T2["Game speed:"+Str$(CONF(4)),88,1]
  701.       End If 
  702.       If NCP=5
  703.         CONF(2)=1-CONF(2)
  704.         T2["Autoplot: "+ST$(0,CONF(2)),104,1]
  705.       End If 
  706.       If NCP=6
  707.         Add CONF(5),RX,1 To 20
  708.         T2["Rounds per game:"+Str$(CONF(5)),120,1]
  709.       End If 
  710.       If NCP=7
  711.         Add CONF(6),RX,2 To 40
  712.         T2["Explosion radius:"+Str$(CONF(6)),136,1]
  713.       End If 
  714.       If NCP=8
  715.         CONF(7)=1-CONF(7)
  716.         T2["Boundary: "+ST$(0,CONF(7)),152,1]
  717.       End If 
  718.       If NCP=9
  719.         CONF(8)=1-CONF(8)
  720.         T2["Events: "+ST$(0,CONF(8)),168,1]
  721.       End If 
  722.     End If 
  723.   Loop 
  724.   Gosub FADOUTRAIN
  725.   MXBS=6
  726.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  727.   For A=320 To 0 Step -8
  728.     Screen Offset 0,A,0
  729.     Wait Vbl 
  730.   Next 
  731.   Gosub FADINRAIN : NCP=MNCP
  732. Return 
  733. PLAZERMENU:
  734.   MNCP=NCP : Gosub FADOUTRAIN
  735.   Ink 0 : Bar 320,0 To 639,187
  736.   For A=0 To 99
  737.     C= Extension_8_11B8(2)
  738.     If C=0 Then C=7
  739.     X= Extension_8_11B8(319) : Y= Extension_8_11B8(187)
  740.      Extension_8_0388 X+320,Y,C
  741.   Next 
  742.   T2["Player options menu",0,1]
  743.   T2["Return to main menu",24,5]
  744.   Gosub UPDATPLY
  745.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  746.   For A=0 To 320 Step 8
  747.     Screen Offset 0,A,0
  748.     Wait Vbl 
  749.   Next 
  750.   MXBS=6
  751.   Gosub FADINRAIN
  752.   Do 
  753.     Gosub CHECKS
  754.     If MK
  755.       If NCP=0
  756.         CO=0
  757.         For A=0 To MXPL-1
  758.           If PL(A,6)>0 : Inc CO : End If 
  759.         Next 
  760.         If CO<2
  761.           If CONF(1) and(SM=0) : SM=10 : Extension_8_1450 Extension_8_04F8(CH),1 : Add CH,1,FC To 3 : End If 
  762.         Else 
  763.           Exit 
  764.         End If 
  765.       End If 
  766.     End If 
  767.     If MK Then RX=1
  768.     If(TM=0) and RX
  769.       TM=10
  770.       If NCP=1 : Add ACPL,RX,0 To MXPL-1 : Gosub UPDATPLY : End If 
  771.       If NCP=2
  772.         Add PL(ACPL,4),RX,2 To 11
  773.         T2["Player"+Str$(ACPL+1)+"s color: "+CO$(PL(ACPL,4)),56,1]
  774.       End If 
  775.       If NCP=3
  776.         Add PL(ACPL,6),RX,0 To 8
  777.         T2["Player"+Str$(ACPL+1)+"s device: "+DEV$(PL(ACPL,6)),72,1]
  778.       End If 
  779.       If NCP>3 and NCP<7
  780.         Add PL(ACPL,NCP+6),RX,0 To 12
  781.         A$="Player"+Str$(ACPL+1)+"s weapon"+Str$(NCP-3)+": "+WEAP$(PL(ACPL,NCP+6))
  782.         A$=A$+" ("+Mid$(Str$(WP(PL(ACPL,NCP+6))),2)+")"
  783.         T2[A$,24+NCP*16,1]
  784.       End If 
  785.     End If 
  786.   Loop 
  787.   Gosub FADOUTRAIN
  788.   MXBS=6
  789.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  790.   For A=320 To 0 Step -8
  791.     Screen Offset 0,A,0
  792.     Wait Vbl 
  793.   Next 
  794.   Gosub FADINRAIN : NCP=MNCP
  795. Return 
  796. UPDATPLY:
  797.   T2["Player selected:"+Str$(ACPL+1),40,1]
  798.   T2["Player"+Str$(ACPL+1)+"s color: "+CO$(PL(ACPL,4)),56,1]
  799.   T2["Player"+Str$(ACPL+1)+"s device: "+DEV$(PL(ACPL,6)),72,1]
  800.   For A=4 To 6
  801.     A$="Player"+Str$(ACPL+1)+"s weapon"+Str$(A-3)+": "+WEAP$(PL(ACPL,A+6))
  802.     A$=A$+" ("+Mid$(Str$(WP(PL(ACPL,A+6))),2)+")"
  803.     T2[A$,24+A*16,1]
  804.   Next 
  805. Return 
  806. DISKMENU:
  807.   MNCP=NCP : Gosub FADOUTRAIN
  808.   Ink 0 : Bar 320,0 To 639,187
  809.   For A=0 To 99
  810.     C= Extension_8_11B8(2)
  811.     If C=0 Then C=7
  812.     X= Extension_8_11B8(319) : Y= Extension_8_11B8(187)
  813.      Extension_8_0388 X+320,Y,C
  814.   Next 
  815.   T2["Disk menu",0,1]
  816.   T2["Return to main menu",24,5]
  817.   T2["Load old settings",40,3]
  818.   T2["Save new settings",56,3]
  819.   T2["Preset: "+PRE$(PRE),72,1]
  820.   T2["Humans:"+Str$(HUM),88,1]
  821.   T2["Computers:"+Str$(COM),104,1]
  822.   T2["Generate scenario!",120,3]
  823.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  824.   For A=0 To 320 Step 8
  825.     Screen Offset 0,A,0
  826.     Wait Vbl 
  827.   Next 
  828.   MXBS=6
  829.   Gosub FADINRAIN
  830.   Do 
  831.     Gosub CHECKS
  832.     If(TM=0) and MK
  833.       TM=10
  834.       Exit If NCP=0
  835.       If NCP=1 : Gosub OPTSLOAD : End If 
  836.       If NCP=2 : Gosub OPTSSAVE : End If 
  837.       If NCP=6 : Gosub GENERATE : End If 
  838.     End If 
  839.     If MK Then RX=1
  840.     If(TM=0) and RX
  841.       TM=10
  842.       If NCP=3
  843.         Add PRE,RX,0 To 7
  844.         T2["Preset: "+PRE$(PRE),72,1]
  845.       End If 
  846.       If NCP=4
  847.         Add HUM,RX,0 To MXPL
  848.         COM=Min(COM,MXPL-HUM)
  849.         If HUM+COM<2 : COM=2-HUM : End If 
  850.         T2["Humans:"+Str$(HUM),88,1]
  851.         T2["Computers:"+Str$(COM),104,1]
  852.       End If 
  853.       If NCP=5
  854.         Add COM,RX,0 To MXPL
  855.         HUM=Min(HUM,MXPL-COM)
  856.         If HUM+COM<2 : COM=2-HUM : End If 
  857.         T2["Humans:"+Str$(HUM),88,1]
  858.         T2["Computers:"+Str$(COM),104,1]
  859.       End If 
  860.     End If 
  861.   Loop 
  862.   Gosub FADOUTRAIN
  863.   MXBS=6
  864.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  865.   For A=320 To 0 Step -8
  866.     Screen Offset 0,A,0
  867.     Wait Vbl 
  868.   Next 
  869.   Gosub FADINRAIN : NCP=MNCP
  870. Return 
  871. OPTSSAVE:
  872.   A=Free
  873.   A$=""
  874.   For A=0 To 8
  875.     A$=A$+Chr$(CONF(A))
  876.   Next 
  877.   A$=A$+Chr$($FF)
  878.   For A=0 To 6
  879.     For K=0 To 6
  880.       A$=A$+Chr$(KEYS(A,K))
  881.     Next 
  882.     A$=A$+Chr$($FF)
  883.   Next 
  884.   For A=0 To MXPL-1
  885.     A$=A$+Chr$(PL(A,5))+Chr$(PL(A,6))+Chr$(PL(A,10))+Chr$(PL(A,11))+Chr$(PL(A,12))+Chr$(PL(A,4))
  886.   Next 
  887.   Trap Open Out 1,"MegaTron.cfg"
  888.     Trap Print #1,A$;
  889.   Trap Close 1
  890.   A$="" : A=Free
  891.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
  892. Return 
  893. OPTSLOAD:
  894.   If Exist("MegaTron.cfg")=0 Then Return 
  895.   OLDMUON=CONF(0)
  896.   FC=0
  897.    Extension_8_0456 "MegaTron.cfg",15
  898.   ST=Start(15)
  899.   For A=0 To 8
  900.     CONF(A)=Peek(ST) : Inc ST
  901.   Next 
  902.   Inc ST
  903.   For A=0 To 6
  904.     For K=0 To 6
  905.       KEYS(A,K)=Peek(ST) : Inc ST
  906.     Next 
  907.     Inc ST
  908.   Next 
  909.   For A=0 To MXPL-1
  910.     Exit If ST=>Start(15)+Length(15)
  911.     PL(A,5)=Peek(ST) : PL(A,6)=Peek(ST+1)
  912.     PL(A,10)=Peek(ST+2) : PL(A,11)=Peek(ST+3)
  913.     PL(A,12)=Peek(ST+4)
  914.     If Peek(ST+5)<>$FF Then PL(A,4)=Peek(ST+5)
  915.     Add ST,6
  916.   Next 
  917.   Erase 15
  918.   If MUON=0 Then CONF(0)=0
  919.   If SOON=0 Then CONF(1)=0
  920.   If CONF(0)=0 Then Extension_8_10A8 
  921.   If CONF(0)<>0 and OLDMUON=0 Then FC=3 : Extension_8_108E 3
  922.   CH=FC
  923.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
  924. Return 
  925. GENERATE:
  926.   On PRE+1 Gosub G_RANDOM,G_NORMAL,G_ROCKET,G_SUPCOM,G_MONO,G_TDEF,G_TATT,G_NOW
  927.   If HUM+COM<10
  928.     For A=HUM+COM To MXPL-1
  929.       PL(A,6)=0
  930.     Next 
  931.   End If 
  932.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
  933. Return 
  934. G_RANDOM:
  935.   If HUM
  936.     DEV=1
  937.     For A=0 To HUM-1
  938.       PL(A,6)=DEV
  939.       PL(A,4)=A+2 : PL(A,10)= Extension_8_11B8(12) : PL(A,11)= Extension_8_11B8(12) : PL(A,12)= Extension_8_11B8(12)
  940.       Add DEV,1,1 To 7
  941.     Next 
  942.   End If 
  943.   If COM
  944.     For A=HUM To HUM+COM-1
  945.       PL(A,6)=8
  946.       PL(A,4)=A+2 : PL(A,10)= Extension_8_11B8(12) : PL(A,11)= Extension_8_11B8(12) : PL(A,12)= Extension_8_11B8(12)
  947.     Next 
  948.   End If 
  949. Return 
  950. G_NORMAL:
  951.   If HUM
  952.     DEV=1
  953.     For A=0 To HUM-1
  954.       PL(A,6)=DEV
  955.       PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)=3
  956.       Add DEV,1,1 To 7
  957.     Next 
  958.   End If 
  959.   If COM
  960.     For A=HUM To HUM+COM-1
  961.       PL(A,6)=8
  962.       PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)= Extension_8_11B8(8)+1
  963.     Next 
  964.   End If 
  965. Return 
  966. G_ROCKET:
  967.   If HUM
  968.     DEV=1
  969.     For A=0 To HUM-1
  970.       PL(A,6)=DEV
  971.       PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)=3
  972.       Add DEV,1,1 To 7
  973.     Next 
  974.   End If 
  975.   If COM
  976.     For A=HUM To HUM+COM-1
  977.       PL(A,6)=8
  978.       PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=7 : PL(A,12)=7
  979.     Next 
  980.   End If 
  981. Return 
  982. G_SUPCOM:
  983.   If HUM
  984.     DEV=1
  985.     For A=0 To HUM-1
  986.       PL(A,6)=DEV
  987.       PL(A,4)=A+2 : PL(A,10)=1 : PL(A,11)=2 : PL(A,12)=9
  988.       Add DEV,1,1 To 7
  989.     Next 
  990.   End If 
  991.   If COM
  992.     For A=HUM To HUM+COM-1
  993.       PL(A,6)=8
  994.       PL(A,4)=HUM+2 : PL(A,10)=7 : PL(A,11)=3 : PL(A,12)=6
  995.     Next 
  996.   End If 
  997. Return 
  998. G_MONO:
  999.   If HUM
  1000.     DEV=1
  1001.     For A=0 To HUM-1
  1002.       PL(A,6)=DEV
  1003.       PL(A,4)=PL(0,4) : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)=0
  1004.       Add DEV,1,1 To 7
  1005.     Next 
  1006.   End If 
  1007.   If COM
  1008.     For A=HUM To HUM+COM-1
  1009.       PL(A,6)=8
  1010.       PL(A,4)=PL(0,4) : PL(A,10)=7 : PL(A,11)=7 : PL(A,12)=7
  1011.     Next 
  1012.   End If 
  1013. Return 
  1014. G_TDEF:
  1015.   If HUM
  1016.     DEV=1
  1017.     For A=0 To HUM-1
  1018.       PL(A,6)=DEV
  1019.       PL(A,4)=A+2 : PL(A,10)=2 : PL(A,11)=8 : PL(A,12)=9
  1020.       Add DEV,1,1 To 7
  1021.     Next 
  1022.   End If 
  1023.   If COM
  1024.     For A=HUM To HUM+COM-1
  1025.       PL(A,6)=8
  1026.       PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=3 : PL(A,12)=5
  1027.     Next 
  1028.   End If 
  1029. Return 
  1030. G_TATT:
  1031.   If HUM
  1032.     DEV=1
  1033.     For A=0 To HUM-1
  1034.       PL(A,6)=DEV
  1035.       PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=3 : PL(A,12)=5
  1036.       Add DEV,1,1 To 7
  1037.     Next 
  1038.   End If 
  1039.   If COM
  1040.     For A=HUM To HUM+COM-1
  1041.       PL(A,6)=8
  1042.       PL(A,4)=A+2 : PL(A,10)=2 : PL(A,11)=8 : PL(A,12)=9
  1043.     Next 
  1044.   End If 
  1045. Return 
  1046. G_NOW:
  1047.   If HUM
  1048.     DEV=1
  1049.     For A=0 To HUM-1
  1050.       PL(A,6)=DEV
  1051.       PL(A,4)=A+2 : PL(A,10)=0 : PL(A,11)=0 : PL(A,12)=0
  1052.       Add DEV,1,1 To 7
  1053.     Next 
  1054.   End If 
  1055.   If COM
  1056.     For A=HUM To HUM+COM-1
  1057.       PL(A,6)=8
  1058.       PL(A,4)=A+2 : PL(A,10)=0 : PL(A,11)=0 : PL(A,12)=0
  1059.     Next 
  1060.   End If 
  1061. Return 
  1062. REDEFINE:
  1063.   MNCP=NCP : Gosub FADOUTRAIN
  1064.   Ink 0 : Bar 320,0 To 639,187
  1065.   For A=0 To 199
  1066.     C= Extension_8_11B8(2)
  1067.     If C=0 Then C=7
  1068.     X= Extension_8_11B8(319) : Y= Extension_8_11B8(140)
  1069.      Extension_8_0388 X+320,Y,C
  1070.   Next 
  1071.   T2["Redefine keys menu",0,1]
  1072.   T2["Return to main menu",24,5]
  1073.   T2["Define joystick 1 special keys",40,1]
  1074.   T2["Define joystick 2 special keys",56,1]
  1075.   T2["Define joystick 3 special keys",72,1]
  1076.   T2["Define joystick 4 special keys",88,1]
  1077.   T2["Define keys set 1",104,1]
  1078.   T2["Define keys set 2",120,1]
  1079.   T2["Define keys set 3",136,1]
  1080.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  1081.   For A=0 To 320 Step 8
  1082.     Screen Offset 0,A,0
  1083.     Wait Vbl 
  1084.   Next 
  1085.   MXBS=7
  1086.   Gosub FADINRAIN
  1087.   Do 
  1088.     Gosub CHECKS
  1089.     If MK
  1090.       If NCP=0 : Exit : End If 
  1091.       If NCP=1 : PRT=1 : DEV=0 : Gosub DEFINEJOY : End If 
  1092.       If NCP=2 : PRT=2 : DEV=1 : Gosub DEFINEJOY : End If 
  1093.       If NCP=3 : PRT=3 : DEV=2 : Gosub DEFINEJOY : End If 
  1094.       If NCP=4 : PRT=4 : DEV=3 : Gosub DEFINEJOY : End If 
  1095.       If NCP=5 : PRT=1 : DEV=4 : Gosub DEFINEKEYS : End If 
  1096.       If NCP=6 : PRT=2 : DEV=5 : Gosub DEFINEKEYS : End If 
  1097.       If NCP=7 : PRT=3 : DEV=6 : Gosub DEFINEKEYS : End If 
  1098.     End If 
  1099.   Loop 
  1100.   Gosub FADOUTRAIN
  1101.   MXBS=6
  1102.   If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
  1103.   For A=320 To 0 Step -8
  1104.     Screen Offset 0,A,0
  1105.     Wait Vbl 
  1106.   Next 
  1107.   Gosub FADINRAIN : NCP=MNCP
  1108. Return 
  1109. DEFINEJOY:
  1110.   Ink 0 : Bar 320,156 To 639,187
  1111.   For K=0 To 6 : Gosub SHOKEY : Next 
  1112.   For K=4 To 6
  1113.     Repeat : Gosub CHECK2 : Until SC=0
  1114.     Gosub DEFINE
  1115.   Next 
  1116. Return 
  1117. DEFINEKEYS:
  1118.   Ink 0 : Bar 320,156 To 639,187
  1119.   For K=0 To 6 : Gosub SHOKEY : Next 
  1120.   For K=0 To 6
  1121.     Repeat : Gosub CHECK2 : Until SC=0
  1122.     Gosub DEFINE
  1123.   Next 
  1124. Return 
  1125. SHOKEY:
  1126.   Gosub GEDIR
  1127.   T[A$,X,156+Y*8,1]
  1128.   SC=KEYS(DEV,K)
  1129.   If SC>$7F
  1130.     A$=EXTKEYS$(SC-$80)
  1131.   Else 
  1132.     A$= Extension_8_08B4(SC)
  1133.   End If 
  1134.   T[A$,X+56,156+Y*8,5]
  1135. Return 
  1136. GEDIR:
  1137.   If K=0 Then A$="Left :" : X=320 : Y=0
  1138.   If K=1 Then A$="Right:" : X=320 : Y=1
  1139.   If K=2 Then A$="Up   :" : X=320 : Y=2
  1140.   If K=3 Then A$="Down :" : X=320 : Y=3
  1141.   If K=4 Then A$="Weap1:" : X=480 : Y=0
  1142.   If K=5 Then A$="Weap2:" : X=480 : Y=1
  1143.   If K=6 Then A$="Weap3:" : X=480 : Y=2
  1144. Return 
  1145. DEFINE:
  1146.   Gosub GEDIR
  1147.   T[A$,X,156+Y*8,3]
  1148.   Repeat 
  1149.     Gosub CHECK2
  1150.   Until SC>0
  1151.   If SC=$45
  1152.     SC=KEYS(DEV,K)
  1153.   Else 
  1154.     KEYS(DEV,K)=SC
  1155.   End If 
  1156.   T[A$,X,156+Y*8,1]
  1157.   Ink 0 : Bar X+56,156+Y*8 To X+159,163+Y*8
  1158.   If SC>$7F
  1159.     A$=EXTKEYS$(SC-$80)
  1160.   Else 
  1161.     A$= Extension_8_08B4(SC)
  1162.   End If 
  1163.   T[A$,X+56,156+Y*8,3]
  1164.   Repeat 
  1165.     Gosub CHECK2
  1166.   Until SC=0
  1167. Return 
  1168. ACTUALCURS:
  1169.   If NCP<>OCP
  1170.     If CONF(1) : Extension_8_1450 Extension_8_04F8(CH),4 : Add CH,1,FC To 3 : End If 
  1171.     For A=0 To 7
  1172.       Rain(0,OCP*16+A+20)=A
  1173.       Rain(0,OCP*16+34-A)=A
  1174.     Next 
  1175.     FL=0 : OCP=NCP
  1176.   End If 
  1177.   For A=0 To 7
  1178.     B=Max(A-Abs(FL),0)+(Abs(FL*A)*4) and $FF0
  1179.     Rain(0,NCP*16+A+20)=B
  1180.     Rain(0,NCP*16+34-A)=B
  1181.   Next 
  1182.   Add FL,1,-7 To 7
  1183. Return 
  1184. End Proc
  1185. Procedure GAMEON
  1186.   Screen Open 0,320,256+22*Ntsc,16,0 : Screen Hide 
  1187.   Curs Off : Flash Off : Paper 0 : Pen 1
  1188.   Screen Display 0,128,40-NTS,320,256+22*Ntsc
  1189.   Gr Writing 0
  1190.   For A=0 To 15 : Colour A,0 : Next 
  1191.   Screen Show 
  1192.   Clip 0,1 To 320,215
  1193.   Auto View Off 
  1194.   For ROUNDS=1 To CONF(5)
  1195.     HUMAN=0
  1196.     For A=0 To MXPL-1
  1197.       If PL(A,6)>0 and PL(A,6)<8 Then Inc HUMAN
  1198.     Next 
  1199.     View : Sprite Off 
  1200.     PLAZERRESET
  1201.     NP=Param
  1202.     Cls 
  1203.     If CONF(7)
  1204.        Extension_8_1016 0,0 To 319,0,1
  1205.        Extension_8_1016 0,215 To 319,215,1
  1206.        Extension_8_1016 0,1 To 0,214,1
  1207.        Extension_8_1016 319,1 To 319,214,1
  1208.     End If 
  1209.     Colour 17,$FFF : Colour 18,$999 : Colour 19,$555
  1210.     Fade 2,0,$FFF,$F00,$F0,$44F,$F0F,$FF,$F80,$FF0,$888,$8F8,$F8F
  1211.     For A=0 To MXPL-1
  1212.       If PL(A,5) Then Gosub DRAPLAYERS
  1213.     Next 
  1214.     T["Round"+Str$(ROUNDS),-1,96,1]
  1215.     If Ntsc Then Extension_8_1204 30
  1216.     Gosub UPDAT
  1217.     If Ntsc Then Extension_8_05B0 "topaz",8
  1218.     AD=Screen Base+80
  1219.     Screen Open 1,32,9,2,0 : Screen Hide 
  1220.     Curs Off : Cls 
  1221.     UPP=0 : Z=25
  1222.     For A=5 To 0 Step -1
  1223.       Screen 1 : Home : Print Mid$(Str$(A),2);
  1224.       Screen 0 : View 
  1225.       For D=0 To 3
  1226.         Break Off 
  1227.         OLPLN=Deek(AD) : Doke AD,1
  1228.         Zoom 1,0,0,8,8 To 0,160-Z,133-Z,160+Z,133+Z
  1229.         Wait 5
  1230.          Extension_8_0346 Y Hard(133+Z)
  1231.         Ink 0 : Bar 160-Z,133-Z To 160+Z,133+Z
  1232.         Doke AD,OLPLN
  1233.         Break On 
  1234.         Dec Z
  1235.       Next 
  1236.       If SO Then Extension_8_1450 Extension_8_04F8(CH),4 : Add CH,1,FC To 3
  1237.     Next 
  1238.     If SO Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
  1239.     T["Round"+Str$(ROUNDS),-1,96,0]
  1240.     TIM=0 : CL=Cop Logic : View 
  1241.     EV=99
  1242.     If Ntsc Then Extension_8_1204 30
  1243.     While NP>1
  1244.       Gosub UPDATMONEY
  1245.       If CONF(8) Then Gosub EVNTS
  1246.       If HUMAN
  1247.         If CONF(4)<9
  1248.           While Timer<9-CONF(4)
  1249.             Multi Wait 
  1250.           Wend 
  1251.           Timer=0
  1252.         Else 
  1253.           Inc TIM
  1254.           If TIM=>CONF(4)-10
  1255.             Multi Wait : TIM=0
  1256.           End If 
  1257.         End If 
  1258.       End If 
  1259.       I$=Inkey$ : SC=Scancode : KS=Key Shift
  1260.       If I$=Chr$(27) Then View : Fade 2 : Wait 32 : Exit 2
  1261.       If I$="p" Then While Inkey$="" : Multi Wait : Wend 
  1262.       Gosub CONTROL
  1263.       MOVEEXPLO
  1264.       MOVEROCKET
  1265.       MOVEROCKET
  1266.       If Extension_8_11B8(100)=0 and CONF(2) Then Extension_8_0388 Extension_8_11B8(317)+1, Extension_8_11B8(223)+1, Extension_8_11B8(11)
  1267.       If CONF(7) Then Extension_8_1016 0,1 To 0,214,1 : Extension_8_1016 319,1 To 319,214,1
  1268.       For A=0 To MXPL-1
  1269.         If PL(A,5)
  1270.           Gosub MOVE
  1271.           Gosub DRAPLAYERS
  1272.           If PL(A,5) and $200
  1273.             Gosub MOVE
  1274.             Gosub DRAPLAYERS
  1275.           End If 
  1276.         End If 
  1277.       Next 
  1278.     Wend 
  1279.     If Ntsc Then Extension_8_05B0 "topaz",8
  1280.     For A=0 To MXPL-1
  1281.       If PL(A,5) Then Add PL(A,7),2 : Add PL(A,8),1000
  1282.     Next 
  1283.     Fade 2
  1284.     Repeat 
  1285.       If CONF(4)<9 Then While Timer<9-CONF(4) : Multi Wait : Wend : Timer=0
  1286.       Inc TIM : If TIM=>CONF(4)-10 Then Multi Wait : TIM=0
  1287.       MOVEEXPLO
  1288.       MOVEROCKET
  1289.       MOVEROCKET
  1290.       If CONF(7)
  1291.          Extension_8_1016 0,0 To 319,0,1
  1292.          Extension_8_1016 0,215 To 319,215,1
  1293.          Extension_8_1016 0,1 To 0,214,1
  1294.          Extension_8_1016 319,1 To 319,214,1
  1295.       End If 
  1296.     Until Colour(1)=0
  1297.   Next 
  1298.   If Ntsc Then Extension_8_05B0 "topaz",8
  1299.   Clip 
  1300.   Sprite Off 
  1301.   Screen Close 0
  1302.   Auto View On 
  1303. Pop Proc
  1304. EVNTS:
  1305.   If Extension_8_11B8(99)=0 and EVTIM>50 Then Gosub NEVENT
  1306.   Inc EVTIM
  1307.   If EV=0 Then Doke CL+202, Extension_8_11B8($FF)
  1308.   If EV=1 Then A= Extension_8_11B8(1) : Doke CL+190+A*4,- Extension_8_11B8(9) : Doke CL+194-A*4,0
  1309.   If EV=2
  1310.     L=Logbase( Extension_8_11B8(3))
  1311.     A=CL+142+ Extension_8_11B8(3)*8
  1312.     Doke A, Extension_8_0946(L) : Doke A+4,L and $FFFF
  1313.   End If 
  1314.   If EV>2 and EV<6
  1315.     If BLHR<160 : Inc BLHR : End If 
  1316.     Ink 1
  1317.     Bar BLHX- Extension_8_11B8(2)-1,BLHY- Extension_8_11B8(2)-1 To BLHX+ Extension_8_11B8(2),BLHY+ Extension_8_11B8(2)
  1318.     X1=Max(BLHX-5- Extension_8_11B8(BLHR/16),1) : Y1=Max(BLHY-5- Extension_8_11B8(BLHR/16),1)
  1319.     X2=Min(BLHX+5+ Extension_8_11B8(BLHR/16),319) : Y2=Min(BLHY+5+ Extension_8_11B8(BLHR/16),212)
  1320.     Screen Copy 0,X1,Y1,X2,Y2 To 0,X1+ Extension_8_11B8(4)-2,Y1+ Extension_8_11B8(4)-2
  1321.   End If 
  1322.   If EV>5 and EV<9
  1323.     If BLHR<640 : Inc BLHR : End If 
  1324.     X1=Max(BLHX-BLHR/8,1) : Y1=Max(BLHY-BLHR/8,1)
  1325.     X2=Min(BLHX+BLHR/8,319) : Y2=Min(BLHY+BLHR/8,213)
  1326.     Screen Copy 0,X1,Y1,X2,Y2 To 0,X1+ Extension_8_11B8(2)-1,Y1+ Extension_8_11B8(2)-1
  1327.   End If 
  1328.   If EV>8 and EV<14 Then Gosub ROCKETLAUNCHER : CL=Cop Logic : View 
  1329.   If EV>13 and EV<19 Then Gosub EATERLAUNCHER : CL=Cop Logic : View 
  1330. Return 
  1331. NEVENT:
  1332.   EV= Extension_8_11B8(79)
  1333.   Sprite Off 
  1334.   CL=Cop Logic : View 
  1335.   BLHX= Extension_8_11B8(299)+10 : BLHY= Extension_8_11B8(194)+10
  1336.   BLHR=0 : EVTIM=0
  1337. Return 
  1338. ROCKETLAUNCHER:
  1339.   If BLHR>-1 and BLHR<20
  1340.     Sprite 0,X Hard(BLHX),Y Hard(BLHY),62+BLHR/5
  1341.     Inc BLHR
  1342.     If BLHR=20
  1343.       BLHD=0 : TIMOUT=0 : RKS=0
  1344.       Repeat 
  1345.         BLEN= Extension_8_11B8(MXPL-1)
  1346.       Until PL(BLEN,5)
  1347.     End If 
  1348.   Else 
  1349.     If BLHR>0
  1350.       If PL(BLEN,5)=0
  1351.         Repeat 
  1352.           BLEN= Extension_8_11B8(MXPL-1)
  1353.         Until PL(BLEN,5)
  1354.       End If 
  1355.       EVTIM=0
  1356.       DX=Sgn(PL(BLEN,0)-BLHX) : DY=Sgn(PL(BLEN,1)-BLHY)
  1357.       If DY<0 and DX=0 : BLHT=0 : End If 
  1358.       If DY<0 and DX>0 : BLHT=8 : End If 
  1359.       If DY=0 and DX>0 : BLHT=16 : End If 
  1360.       If DY>0 and DX>0 : BLHT=24 : End If 
  1361.       If DY>0 and DX=0 : BLHT=32 : End If 
  1362.       If DY>0 and DX<0 : BLHT=40 : End If 
  1363.       If DY=0 and DX<0 : BLHT=48 : End If 
  1364.       If DY<0 and DX<0 : BLHT=56 : End If 
  1365.       Add BLHD,Sgn(BLHT-BLHD)
  1366.       Add BLHD,Sgn(BLHT-BLHD)
  1367.       Sprite 0,X Hard(BLHX),Y Hard(BLHY),67+BLHD/8
  1368.       If TIMOUT=0
  1369.         If Abs(BLHD-BLHT)<3
  1370.           SETROCKET[BLHX,BLHY,1,BLEN]
  1371.           TIMOUT=25 : Inc RKS
  1372.           If RKS=5
  1373.             BLHR=-1
  1374.           End If 
  1375.           Repeat 
  1376.             BLEN= Extension_8_11B8(MXPL-1)
  1377.           Until PL(BLEN,5)
  1378.         End If 
  1379.       Else 
  1380.         Dec TIMOUT
  1381.       End If 
  1382.     Else 
  1383.       Sprite 0,X Hard(BLHX),Y Hard(BLHY),66-Abs(BLHR/5)
  1384.       Dec BLHR
  1385.       If BLHR=-20 : Gosub NEVENT : End If 
  1386.     End If 
  1387.   End If 
  1388. Return 
  1389. EATERLAUNCHER:
  1390.   If BLHR>-1 and BLHR<20
  1391.     Sprite 0,X Hard(BLHX),Y Hard(BLHY),86+BLHR/5
  1392.     Inc BLHR
  1393.     If BLHR=20
  1394.       BLHD=0 : TIMOUT=0 : RKS=0
  1395.     End If 
  1396.   Else 
  1397.     If BLHR>0
  1398.       EVTIM=0
  1399.       Add BLHD,1,0 To 15
  1400.       Sprite 0,X Hard(BLHX),Y Hard(BLHY),91+BLHD/4
  1401.       If TIMOUT=0
  1402.         SETEATER[BLHX,BLHY,1, Extension_8_11B8(1)*2-1, Extension_8_11B8(1)*2-1]
  1403.         TIMOUT=25 : Inc RKS
  1404.         If RKS=5
  1405.           BLHR=-1
  1406.         End If 
  1407.       Else 
  1408.         Dec TIMOUT
  1409.       End If 
  1410.     Else 
  1411.       Sprite 0,X Hard(BLHX),Y Hard(BLHY),100-Abs(BLHR/5)
  1412.       Dec BLHR
  1413.       If BLHR=-20 : Gosub NEVENT : End If 
  1414.     End If 
  1415.   End If 
  1416. Return 
  1417. UPDAT:
  1418.   If Ntsc=0
  1419.     UY=27 : UX=0 : UPP=0
  1420.     For D=0 To MXPL-1
  1421.       If PL(D,6)
  1422.         Pen PL(D,4)
  1423.         Locate UX,UY : Print DEV$(PL(D,6));" "; Extension_8_0EB8(PL(D,7),5);" "; Extension_8_0EB8(PL(D,8),5);
  1424.         Inc UY : If UY>31 : UY=27 : Add UX,20 : End If 
  1425.       End If 
  1426.     Next 
  1427.   Else 
  1428.     Gr Writing 1
  1429.     Clip 0,216 To 320,234
  1430.     UY=216 : UX=0 : UPP=0
  1431.     For D=0 To MXPL-1
  1432.       If PL(D,6)
  1433.         Ink PL(D,4),0
  1434.         Text UX,UY+Text Base,DEV$(PL(D,6))+" "+ Extension_8_0EB8(PL(D,7),5)+" "+ Extension_8_0EB8(PL(D,8),5)
  1435.         Add UY,6 : If UY>233 : UY=216 : Add UX,80 : End If 
  1436.       End If 
  1437.     Next 
  1438.     Clip 0,1 To 320,215
  1439.     Gr Writing 0
  1440.   End If 
  1441. Return 
  1442. UPDATMONEY:
  1443.   If Ntsc=0
  1444.     If UPP=0 : UY=27 : UX=0 : End If 
  1445.     If PL(UPP,6)
  1446.       Pen PL(UPP,4)
  1447.       Locate UX+13,UY : Print Extension_8_0EB8(PL(UPP,8),5);
  1448.       Inc UY : If UY>31 : UY=27 : Add UX,20 : End If 
  1449.     End If 
  1450.     Add UPP,1,0 To MXPL-1
  1451.   Else 
  1452.     Gr Writing 1
  1453.     Clip 0,216 To 320,234
  1454.     If UPP=0 : UY=216 : UX=0 : End If 
  1455.     If PL(UPP,6)
  1456.       Ink PL(UPP,4),0
  1457.       Text UX+52,UY+Text Base, Extension_8_0EB8(PL(UPP,8),5)
  1458.       Add UY,6 : If UY>233 : UY=216 : Add UX,80 : End If 
  1459.     End If 
  1460.     Add UPP,1,0 To MXPL-1
  1461.     Clip 0,1 To 320,215
  1462.     Gr Writing 0
  1463.   End If 
  1464. Return 
  1465. CONTROL:
  1466.   If SC=0 Then OSC=SC
  1467.   If SC and(SC<>OSC) Then OSC=SC : ACTION[SC]
  1468.   If KS=0 Then OKS=KS
  1469.   If KS and(KS<>OKS) Then OKS=KS : Trap ACTION[ Extension_8_0506(KS)+$60]
  1470.   JX=Abs(Jleft(1)+Jright(1)*2)
  1471.   JY=Abs(Jup(1)+Jdown(1)*2)
  1472.   If JX
  1473.     ACTION[$7F+JX]
  1474.   Else 
  1475.     If JY
  1476.       ACTION[$81+JY]
  1477.     End If 
  1478.   End If 
  1479.   JF1=0
  1480.   If Fire(1) Then JF1=$84
  1481.   If Extension_8_15BE(1,1) Then JF1=$85
  1482.   If LOWLEVEL
  1483.     If Extension_8_15BE(1,2) : JF1=$86 : End If 
  1484.     If Extension_8_15BE(1,3) : JF1=$87 : End If 
  1485.     If Extension_8_15BE(1,4) : JF1=$A0 : End If 
  1486.     If Extension_8_15BE(1,5) : JF1=$A1 : End If 
  1487.     If Extension_8_15BE(1,6) : JF1=$A2 : End If 
  1488.   End If 
  1489.   If JF1=0 Then OJF1=JF1
  1490.   If JF1 and JF1<>OJF1 Then OJF1=JF1 : ACTION[JF1]
  1491.   JX=Abs(Jleft(0)+Jright(0)*2)
  1492.   JY=Abs(Jup(0)+Jdown(0)*2)
  1493.   If JX
  1494.     ACTION[$87+JX]
  1495.   Else 
  1496.     If JY
  1497.       ACTION[$89+JY]
  1498.     End If 
  1499.   End If 
  1500.   JF0=0
  1501.   If Fire(0) Then JF0=$8C
  1502.   If Extension_8_15BE(0,1) Then JF0=$8D
  1503.   If LOWLEVEL
  1504.     If Extension_8_15BE(0,2) : JF0=$8E : End If 
  1505.     If Extension_8_15BE(0,3) : JF0=$8F : End If 
  1506.     If Extension_8_15BE(0,4) : JF0=$A3 : End If 
  1507.     If Extension_8_15BE(0,5) : JF0=$A4 : End If 
  1508.     If Extension_8_15BE(0,6) : JF0=$A5 : End If 
  1509.   End If 
  1510.   If JF0=0 Then OJF0=JF0
  1511.   If JF0 and JF0<>OJF0 Then OJF0=JF0 : ACTION[JF0]
  1512.   If PLAY4DIS Then Return 
  1513.   JX=Abs( Extension_8_08EC(0)+ Extension_8_08FA(0)*2)
  1514.   JY=Abs( Extension_8_0908(0)+ Extension_8_0914(0)*2)
  1515.   If JX
  1516.     ACTION[$8F+JX]
  1517.   Else 
  1518.     If JY
  1519.       ACTION[$91+JY]
  1520.     End If 
  1521.   End If 
  1522.   JF2= Extension_8_0922(0)
  1523.   If JF2=0 Then OJF2=JF2
  1524.   If JF2 and JF2<>OJF2 Then OJF2=JF2 : ACTION[$94]
  1525.   JX=Abs( Extension_8_08EC(1)+ Extension_8_08FA(1)*2)
  1526.   JY=Abs( Extension_8_0908(1)+ Extension_8_0914(1)*2)
  1527.   If JX
  1528.     ACTION[$97+JX]
  1529.   Else 
  1530.     If JY
  1531.       ACTION[$99+JY]
  1532.     End If 
  1533.   End If 
  1534.   JF3= Extension_8_0922(1)
  1535.   If JF3=0 Then OJF3=JF3
  1536.   If JF3 and JF3<>OJF3 Then OJF3=JF3 : ACTION[$9C]
  1537. Return 
  1538. DRAPLAYERS:
  1539.   If PL(A,13)
  1540.     Dec PL(A,13)
  1541.     Ink 0 : Draw PL(A,0)+(PL(A,3)+PL(A,2))*5,PL(A,1)+(PL(A,2)+PL(A,3))*5 To PL(A,0)+(PL(A,2)-PL(A,3))*5,PL(A,1)+(PL(A,3)-PL(A,2))*5
  1542.   End If 
  1543.   If PL(A,9) or PL(A,13)
  1544.      Extension_8_0388 PL(A,0),PL(A,1),1
  1545.   Else 
  1546.      Extension_8_0388 PL(A,0),PL(A,1),PL(A,4)
  1547.   End If 
  1548. Return 
  1549. MOVE:
  1550.   If(PL(A,6)=8 and Extension_8_11B8(100000)<PL(A,8)) and CONF(3)>1 Then ACTION[-A]
  1551.   If PL(A,6)=8 and CONF(3)<3
  1552.     XYZ= Extension_8_11B8(2)+2
  1553.     P= Extension_8_039E((PL(A,0)+PL(A,2)*XYZ+320) mod 320,(PL(A,1)+PL(A,3)*XYZ+216) mod 216)
  1554.     If P>0 : Gosub COMPI : End If 
  1555.   End If 
  1556.   P= Extension_8_039E((PL(A,0)+PL(A,2)+320) mod 320,(PL(A,1)+PL(A,3)+216) mod 216)
  1557.   If CONF(7)
  1558.     If PL(A,0)+PL(A,2)<1 or PL(A,0)+PL(A,2)>318 : P=1 : End If 
  1559.     If PL(A,1)+PL(A,3)<1 or PL(A,1)+PL(A,3)>214 : P=1 : End If 
  1560.   End If 
  1561.   If P>0 and PL(A,9)>0 Then Gosub COMPI
  1562.   If PL(A,6)=8 and(( Extension_8_11B8(100)=0 and CONF(3)) or P) Then Gosub COMPI
  1563.   If P
  1564.     If PL(A,6)<>8 : Dec HUMAN : End If 
  1565.     PL(A,5)=0 : Dec NP
  1566.     SETEXPLO[PL(A,0),PL(A,1),PL(A,4)]
  1567.     If P=PL(A,4) : P=PL(A,14) : End If 
  1568.     For EN=0 To MXPL-1
  1569.       If PL(EN,5) and(PL(EN,4)=P)
  1570.         Inc PL(EN,7)
  1571.         Add PL(EN,8),500
  1572.         Gosub UPDAT
  1573.       End If 
  1574.     Next 
  1575.   Else 
  1576.     PL(A,9)=Max(PL(A,9)-1,0)
  1577.     If PL(A,15)=0
  1578.       If CONF(7)
  1579.         Add PL(A,0),PL(A,2)
  1580.         Add PL(A,1),PL(A,3)
  1581.       Else 
  1582.         PL(A,0)=(PL(A,0)+PL(A,2)+320) mod 320
  1583.         PL(A,1)=(PL(A,1)+PL(A,3)+216) mod 216
  1584.       End If 
  1585.       If(PL(A,5) and $100)=0 : Add PL(A,8),2 : End If 
  1586.     Else 
  1587.       Dec PL(A,15)
  1588.     End If 
  1589.   End If 
  1590. Return 
  1591. COMPI:
  1592.   If P and(P<>PL(A,4)) Then PL(A,14)=P
  1593.   R= Extension_8_11B8(3)
  1594.   For T=0 To 4
  1595.     If R=0 Then RX=-1 : RY=0
  1596.     If R=1 Then RX=1 : RY=0
  1597.     If R=2 Then RY=-1 : RX=0
  1598.     If R=3 Then RY=1 : RX=0
  1599.     P= Extension_8_039E((PL(A,0)+RX+320) mod 320,(PL(A,1)+RY+216) mod 216)
  1600.     If P and(P<>PL(A,4)) Then PL(A,14)=P
  1601.     If P=0
  1602.       PL(A,2)=RX : PL(A,3)=RY
  1603.       If SO and(CONF(0)=0) : Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3 : End If 
  1604.       Return 
  1605.     End If 
  1606.     If T>2 Then ACTION[-A] : P= Extension_8_039E((PL(A,0)+RX+320) mod 320,(PL(A,1)+RY+216) mod 216)
  1607.     Add R,1,0 To 3
  1608.   Next 
  1609. Return 
  1610. End Proc
  1611. Procedure SETEXPLO[XX,YY,C]
  1612.   For A=0 To MXEX-1
  1613.     If EX(A,2)=0
  1614.       EX(A,0)=XX : EX(A,1)=YY : EX(A,2)=C : EX(A,3)=1
  1615.       If SO : Extension_8_1450 Extension_8_04F8(CH),1 : Add CH,1,FC To 3 : End If 
  1616.       Pop Proc[A]
  1617.     End If 
  1618.   Next 
  1619. End Proc[-1]
  1620. Procedure MOVEEXPLO
  1621.   For A=0 To MXEX-1
  1622.     If EX(A,2)
  1623.       If EX(A,3)<CONF(6)+1
  1624.         Ink EX(A,2) : Extension_8_05E6 EX(A,0),EX(A,1),EX(A,3)
  1625.         Inc EX(A,3)
  1626.       Else 
  1627.         If EX(A,3)=CONF(6)*2
  1628.           Ink 0 : Extension_8_05E6 EX(A,0),EX(A,1),CONF(6)
  1629.           EX(A,2)=0
  1630.         Else 
  1631.           Ink 0 : Circle EX(A,0),EX(A,1),CONF(6)*2+1-EX(A,3)
  1632.           Inc EX(A,3)
  1633.         End If 
  1634.       End If 
  1635.     End If 
  1636.   Next 
  1637. End Proc
  1638. Procedure SETROCKET[XX,YY,C,E]
  1639.   For A=0 To MXRO-1
  1640.     If RO(A,4)=0
  1641.       RO(A,0)=XX : RO(A,1)=YY : RO(A,2)=C : RO(A,3)=E : RO(A,4)=150
  1642.       RO(A,5)=-1 : RO(A,6)=1
  1643.       If SO : Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3 : End If 
  1644.       Exit 
  1645.     End If 
  1646.   Next 
  1647. End Proc
  1648. Procedure SETEATER[XX,YY,C,RX,RY]
  1649.   For A=0 To MXRO-1
  1650.     If RO(A,4)=0
  1651.       RO(A,0)=XX : RO(A,1)=YY : RO(A,2)=C : RO(A,4)=500
  1652.       RO(A,5)=-1 : RO(A,6)=2 : RO(A,7)=RX : RO(A,8)=RY : RO(A,3)=-1
  1653.       If SO : Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3 : End If 
  1654.       Exit 
  1655.     End If 
  1656.   Next 
  1657. End Proc
  1658. Procedure MOVEROCKET
  1659.   For A=0 To MXRO-1
  1660.     If RO(A,4)
  1661.       EN=RO(A,3)
  1662.       If RO(A,6)=1
  1663.         RX=Sgn(PL(EN,0)-RO(A,0)) : RY=Sgn(PL(EN,1)-RO(A,1))
  1664.         If RO(A,5)=>0 : Extension_8_0388 RO(A,0),RO(A,1),RO(A,5) : End If 
  1665.         P= Extension_8_039E(RO(A,0)+RX,RO(A,1)+RY)
  1666.         Dec RO(A,4)
  1667.         If PL(EN,5)=0 or RO(A,4)=0 or(P>0 and P<>RO(A,2))
  1668.           SETEXPLO[RO(A,0),RO(A,1),RO(A,2)]
  1669.           If Param=>0 : EX(Param,3)=CONF(6) : End If 
  1670.           RO(A,4)=0
  1671.         Else 
  1672.           RO(A,5)=P
  1673.           Add RO(A,0),RX
  1674.           Add RO(A,1),RY
  1675.            Extension_8_0388 RO(A,0),RO(A,1),1
  1676.         End If 
  1677.       Else 
  1678.         X=RO(A,0) : Y=RO(A,1)
  1679.         If RO(A,5)=>0 : Extension_8_0388 X,Y,RO(A,5) : End If 
  1680.         Dec RO(A,4)
  1681.         If RO(A,4)=0
  1682.           SETEXPLO[RO(A,0),RO(A,1),RO(A,2)]
  1683.         Else 
  1684.           W=1
  1685.           RX=RO(A,7) : RY=RO(A,8) : Gosub FPIX
  1686.           DX= Extension_8_11B8(1)*2-1 : DY= Extension_8_11B8(1)*2-1
  1687.           If W : RX=-DX : RY=0 : Gosub FPIX : End If 
  1688.           If W : RX=0 : RY=-DY : Gosub FPIX : End If 
  1689.           If W : RX=-DX : RY=0 : Gosub FPIX : End If 
  1690.           If W : RX=0 : RY=DY : Gosub FPIX : End If 
  1691.           If W : RX=DX : RY=0 : Gosub FPIX : End If 
  1692.           If W=-1
  1693.             For AA=0 To 15
  1694.               RO(A,7)= Extension_8_11B8(2)-1 : RO(A,8)= Extension_8_11B8(2)-1
  1695.               Exit If Abs(RO(A,7))+Abs(RO(A,8)) and Extension_8_039E(X+RO(A,7),Y+RO(A,8))<>1
  1696.             Next 
  1697.             If AA=16
  1698.               RO(A,4)=0 : W=0
  1699.               SETEXPLO[RO(A,0),RO(A,1),RO(A,2)*2]
  1700.             End If 
  1701.           End If 
  1702.           If W
  1703.             If RO(A,3)=-1
  1704.               RO(A,0)=X+RO(A,7) : RO(A,1)=Y+RO(A,8)
  1705.               RO(A,5)= Extension_8_039E(RO(A,0),RO(A,1))
  1706.             Else 
  1707.               SETEXPLO[RO(A,0),RO(A,1),RO(A,2)]
  1708.               If Param=>0 : EX(Param,3)=CONF(6) : End If 
  1709.               RO(A,4)=0
  1710.             End If 
  1711.           End If 
  1712.            Extension_8_0388 RO(A,0),RO(A,1),1
  1713.         End If 
  1714.       End If 
  1715.     End If 
  1716.   Next 
  1717. Pop Proc
  1718. FPIX:
  1719.   P= Extension_8_039E(X+RX,Y+RY)
  1720.   If P=1
  1721.     W=-1 : RO(A,5)=P : Return 
  1722.   End If 
  1723.   If RO(A,3)=-1
  1724.     If P>0 and P<>RO(A,2)
  1725.       RO(A,0)=X+RX : RO(A,1)=Y+RY
  1726.       RO(A,5)=0 : W=0 : RO(A,3)=P
  1727.     End If 
  1728.   Else 
  1729.     If P=RO(A,3)
  1730.       RO(A,0)=X+RX : RO(A,1)=Y+RY
  1731.       RO(A,5)=0 : W=0
  1732.     End If 
  1733.   End If 
  1734. Return 
  1735. End Proc
  1736. Procedure ACTION[KEY]
  1737.   Shared KEYS()
  1738.   If KEY<=0 Then Gosub COMPACT Else Gosub HUMACT
  1739. Pop Proc
  1740. HUMACT:
  1741.   For A=0 To MXPL-1
  1742.     If PL(A,5)
  1743.       D=PL(A,6)
  1744.       If D>0 and D<8
  1745.         For K=0 To 6
  1746.           If KEYS(D-1,K)=KEY
  1747.             On K+1 Gosub TLEFT,TRIGHT,TUP,TDOWN,WEAPON,WEAPON,WEAPON
  1748.             Exit 
  1749.           End If 
  1750.         Next 
  1751.       End If 
  1752.     End If 
  1753.   Next 
  1754. Return 
  1755. COMPACT:
  1756.   K=Rnd(2)+4 : A=-KEY
  1757.   Gosub WEAPON
  1758. Return 
  1759. TLEFT:
  1760.   If PL(A,2)=0 Then PL(A,2)=-1 : PL(A,3)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
  1761. Return 
  1762. TRIGHT:
  1763.   If PL(A,2)=0 Then PL(A,2)=1 : PL(A,3)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
  1764. Return 
  1765. TUP:
  1766.   If PL(A,3)=0 Then PL(A,3)=-1 : PL(A,2)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
  1767. Return 
  1768. TDOWN:
  1769.   If PL(A,3)=0 Then PL(A,3)=1 : PL(A,2)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
  1770. Return 
  1771. WEAPON:
  1772.   WP=PL(A,K+6)
  1773.   If PL(A,8)<WP(WP) Then Return 
  1774.   C=0
  1775.   For T=0 To MXPL-1
  1776.     If PL(T,5) Then Inc C
  1777.   Next 
  1778.   If C<2 Then Return 
  1779.   Repeat 
  1780.     EN= Extension_8_11B8(MXPL-1)
  1781.   Until PL(EN,5) and A<>EN
  1782.   Add PL(A,8),-WP(WP)
  1783.   On WP Gosub JUMPSPEED,IMPLODER,TUNNEL,AUTOPILOT,BOES,BIGBOX,ROCKETS,SHIELD,TELEPORT,SPEEDUP,EATER,FREZ
  1784. Return 
  1785. EATER:
  1786.   SETEATER[PL(A,0)+PL(A,2),PL(A,1)+PL(A,3),PL(A,4),PL(A,2),PL(A,3)]
  1787. Return 
  1788. FREZ:
  1789.   Add PL(A,15),250
  1790. Return 
  1791. JUMPSPEED:
  1792.   PL(A,2)=Sgn(PL(A,2))*2 : PL(A,3)=Sgn(PL(A,3))*2
  1793.   PL(A,5)=PL(A,5) or $100
  1794. Return 
  1795. SPEEDUP:
  1796.   PL(A,5)=PL(A,5) or $300
  1797. Return 
  1798. IMPLODER:
  1799.   If SO Then Extension_8_1450 Extension_8_04F8(CH),10 : Add CH,1,FC To 3
  1800.   Ink 0 : Extension_8_05E6 PL(A,0),PL(A,1),10
  1801. Return 
  1802. TUNNEL:
  1803.   If SO Then Extension_8_1450 Extension_8_04F8(CH),7 : Add CH,1,FC To 3
  1804.   Ink PL(A,4)
  1805.   Draw PL(EN,0)+PL(EN,3),PL(EN,1)+PL(EN,2) To PL(EN,0)+PL(EN,3)+PL(EN,2)*20,PL(EN,1)+PL(EN,2)+PL(EN,3)*20
  1806.   Draw PL(EN,0)-PL(EN,3),PL(EN,1)-PL(EN,2) To PL(EN,0)-PL(EN,3)+PL(EN,2)*20,PL(EN,1)-PL(EN,2)+PL(EN,3)*20
  1807. Return 
  1808. AUTOPILOT:
  1809.   If SO Then Extension_8_1450 Extension_8_04F8(CH),3 : Add CH,1,FC To 3
  1810.   Add PL(A,9),250
  1811. Return 
  1812. BOES:
  1813.   If SO Then Extension_8_1450 Extension_8_04F8(CH),2 : Add CH,1,FC To 3
  1814.   Ink PL(A,4)
  1815.   Box PL(EN,0)-7,PL(EN,1)-7 To PL(EN,0)-2,PL(EN,1)-2
  1816.   Box PL(EN,0)+7,PL(EN,1)-7 To PL(EN,0)+2,PL(EN,1)-2
  1817.   Box PL(EN,0)-7,PL(EN,1)+7 To PL(EN,0)-2,PL(EN,1)+2
  1818.   Box PL(EN,0)+7,PL(EN,1)+7 To PL(EN,0)+2,PL(EN,1)+2
  1819. Return 
  1820. BIGBOX:
  1821.   If SO Then Extension_8_1450 Extension_8_04F8(CH),2 : Add CH,1,FC To 3
  1822.   Ink PL(A,4)
  1823.   Circle PL(EN,0),PL(EN,1),48
  1824. Return 
  1825. ROCKETS:
  1826.   SETROCKET[PL(A,0),PL(A,1),PL(A,4),EN]
  1827. Return 
  1828. SHIELD:
  1829.   Add PL(A,13),250
  1830. Return 
  1831. TELEPORT:
  1832.   If SO Then Extension_8_1450 Extension_8_04F8(CH),9 : Add CH,1,FC To 3
  1833.   PL(A,0)= Extension_8_11B8(317)+1 : PL(A,1)= Extension_8_11B8(213)+1
  1834.   Ink PL(A,4) : Extension_8_05E6 PL(A,0)-PL(A,2)*3,PL(A,1)-PL(A,3)*3,3
  1835.   Ink 0 : Extension_8_05E6 PL(A,0)+PL(A,2)*11,PL(A,1)+PL(A,3)*11,10
  1836. Return 
  1837. End Proc
  1838. Procedure T[T$,XX,Y,C]
  1839.   If XX<0 Then XX=160-Text Length(T$)/2
  1840.   YY=Y+Text Base
  1841.   Ink C : Text XX,YY,T$
  1842. End Proc
  1843. Procedure T1[T$,Y,C]
  1844.   XX=160-Len(T$)*4 : YY=Y+Text Base
  1845.   Ink 0 : Bar XX-8,Y To XX+Len(T$)*8+8,Y+9
  1846.   Ink C+1 : Text XX+1,YY+1,T$
  1847.   Ink C : Text XX,YY,T$
  1848. End Proc
  1849. Procedure T2[T$,Y,C]
  1850.   XX=480-Len(T$)*4 : YY=Y+Text Base
  1851.   Ink 0 : Bar XX-32,Y To XX+Len(T$)*8+32,Y+9
  1852.   Ink C+1 : Text XX+1,YY+1,T$
  1853.   Ink C : Text XX,YY,T$
  1854. End Proc
  1855. Procedure T3[T$,Y]
  1856.   X=480-Len(T$)*8
  1857.   For A=1 To Len(T$)
  1858.     C=Asc(Mid$(T$,A,1))-29
  1859.     Paste Bob X,Y,C
  1860.     Add X,16
  1861.   Next 
  1862. End Proc